#ifndef HANDLER_H
#define HANDLER_H

#include <QByteArray>
#include <QVector>

/**
 * @brief The IHandler class
 * @brief 抽象策略，根据type解析
 */
class IHandler
{
public:
    virtual void handle(const QByteArray& data)=0;
    virtual void reset() {}
};

/**
 * @brief The Handler class
 * @brief 管理策略
 *   1. 我们需要登录，则实现登录的策略后，通过handler进行调度
 *  命令模式: 将请求和执行解耦
 */
class Handler
{
public:
    enum Type{
        regist = 0,
        login,
        chat,
        //创建房间
        getRoom,
        createRoom,
        joinRoom,
        closeRoom,
        //刷新观众列表
        addAudience,
        deleAudience,
        //音频输入输出
        audioTrans,
        //视频输入输出
        videoTrans,
        //心跳包
        heartbeat,

        last
    };

    Handler();

    void handle(int type, const QByteArray& data);

protected:
    QVector<IHandler*> handlers;
};

#endif // HANDLER_H
